#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

// gcc 03_mkfifo.c -o write -D WRITE
// gcc 03_mkfifo.c -o read -D READ

int main(int argc, char const *argv[])
{
    //创建一个有名管道  shell cmd: mkfifo a.txt
    mkfifo("a.txt", 0666);

    //打开有名管道
    #ifdef WRITE
        int fd = open("a.txt", O_WRONLY);
    #endif

    #ifdef READ
        int fd = open("a.txt", O_RDONLY);
    #endif
    if(fd < 0) {
        perror("open");
        return 0;
    }

    printf("写端打开了\n");

    #ifdef WRITE
        //获取键盘输入 并向有名管道发送数据
        while(1) {
            char buf[128]="";
            printf("请输入发送的内容:");
            fgets(buf, sizeof(buf), stdin);
            buf[strlen(buf)-1]=0;

            //发送数据
            write(fd, buf, strlen(buf));
            if(strcmp(buf,"bye")==0)
                break;
        }
    #endif

    #ifdef READ
        //不停的从有名管道读取内容
        while(1) {
            char buf[128]="";
            read(fd, buf,sizeof(buf));
            printf("读到的内容:%s\n",buf);
            if(strcmp(buf,"bye")==0)
                break;
        }
    #endif

    close(fd);

    return 0;
}